시스템 프롬프트
시스템 프롬프트는 Claude가 사용자 입력에 응답하는 방식을 커스터마이징하는 강력한 수단입니다. 일반적인 답변 대신, 특정 사용 사례에 맞게 Claude의 어조, 스타일, 접근 방식을 조정할 수 있습니다.
시스템 프롬프트가 중요한 이유
수학 튜터 챗봇을 만든다고 가정해봅시다. 학생이 "5x + 2 = 3에서 x를 어떻게 풀어요?"라고 물을 때, 단순히 답을 내뱉는 것이 아니라 실제 튜터처럼 행동하기를 원할 것입니다. 좋은 수학 튜터라면:
- 처음에는 완전한 풀이 대신 힌트를 제공해야 합니다
- 학생이 문제를 단계별로 차근차근 풀어나갈 수 있도록 인내심 있게 안내해야 합니다
- 비슷한 문제의 풀이를 예시로 보여줘야 합니다
Claude가 다음과 같이 행동하는 것은 절대로 원하지 않을 것입니다:
- 즉시 직접적인 답을 알려주는 것
- 학생에게 그냥 계산기를 사용하라고 말하는 것
시스템 프롬프트 작동 방식
시스템 프롬프트는 Claude에게 응답 방법에 대한 지침을 제공합니다. 일반 문자열로 정의한 후 create 함수 호출에 전달합니다. 주요 이점은 다음과 같습니다:
- 시스템 프롬프트는 Claude에게 응답 방법에 대한 지침을 제공합니다
- Claude는 지정된 역할을 가진 사람이 응답하는 것과 같은 방식으로 응답하려고 합니다
- Claude가 과제에 집중하도록 도와줍니다
기본 구조는 다음과 같습니다:
system_prompt = """
You are a patient math tutor.
Do not directly answer a student's questions.
Guide them to a solution step by step.
"""
client.messages.create(
model=model,
messages=messages,
max_tokens=1000,
system=system_prompt
)
차이 확인하기
시스템 프롬프트 없이는 Claude가 즉시 완전한 단계별 풀이를 제공합니다. 이것이 도움이 될 수도 있지만, 학생 스스로 문제를 생각해보도록 독려하지는 않습니다.
수학 튜터 시스템 프롬프트를 사용하면 Claude의 응답이 극적으로 바뀝니다. 완전한 풀이를 제공하는 대신, "x를 분리하기 위한 첫 번째 좋은 단계는 무엇일까요? 항을 이동하기 시작하려면 양변에 어떤 연산을 수행해야 할지 생각해보세요."와 같은 안내 질문을 합니다.
유연한 채팅 함수 만들기
시스템 프롬프트를 하드코딩하는 대신, 시스템 프롬프트를 매개변수로 받아 채팅 함수를 더 재사용 가능하게 만들 수 있습니다:
def chat(messages, system=None):
params = {
"model": model,
"max_tokens": 1000,
"messages": messages,
}
if system:
params["system"] = system
message = client.messages.create(**params)
return message.content[0].text
이 방식은 중요한 세부 사항을 처리합니다: Claude의 API는 system=None을 허용하지 않으므로, system 매개변수가 제공된 경우에만 조건부로 포함해야 합니다.
이제 시스템 프롬프트 유무에 관계없이 채팅 함수를 호출할 수 있습니다:
# Without system prompt
answer = chat(messages)
# With system prompt
system = """
You are a patient math tutor.
Do not directly answer a student's questions.
Guide them to a solution step by step.
"""
answer = chat(messages, system=system)
시스템 프롬프트는 의도한 목적에 맞게 일관되고 적절하게 동작하는 AI 애플리케이션을 만드는 데 필수적입니다. 일반적인 AI 응답을 특화되고 역할에 맞는 상호작용으로 변환합니다.
